/* ************************************************************************
> File Name:     strtok_r.c
> Author:        zhfu
> mail:          3346897597@qq.com
> Created Time:  2022年04月27日 星期三 22时32分31秒
> Description:   
 ************************************************************************/
#include<stddef.h>

int indelim(const char *delim, char c)
{
    while (*delim){
        if (*delim++ == c){
            return 1;
        }
    }

    return 0;
}

char *my_strtok_r(char *str, const char *delim, char **saveptr)
{
    char *ret = str;
    if (str){
        while (!indelim(delim, *str) && *str){
            ++str;
        }
        if (*str){
            *str = '\0';
            *saveptr = str + 1;
            if (str == ret){
                return my_strtok_r(NULL, delim, saveptr);
            }
            return ret;
        }
        else{
            return NULL;
        }
    }
    else{
        ret = *saveptr;
        while (!indelim(delim, **saveptr) && **saveptr){
            ++*saveptr;
        }
        if (**saveptr){
            **saveptr = '\0';
            ++*saveptr; 
            if (*saveptr == ret + 1){
                return my_strtok_r(NULL, delim, saveptr);
            }
            return ret;
        }
        else{
            if (!*ret){
               return NULL;
            }
            return ret;
        }
    }

}
